package com.wyvoid.forum.dao;

import java.util.List;
import java.util.Map;

import com.wyvoid.forum.domain.Topic;
import com.wyvoid.forum.web.search.SearchBean;
import com.wyvoid.core.persistent.hibernate.IHibernateDAO;
import com.wyvoid.core.persistent.hibernate.HibernatePage;
import com.wyvoid.core.persistent.Pagination;

/**
 * 主题模块数据处理接口
 * 
 * @author wyvoid
 * @link www.wyvoid.com
 */
public interface ITopicDAO extends IHibernateDAO<Topic> {

	
	/**
	 * 根据贴子状态列表贴子
	 * 
	 * @param forumId 论坛编号
	 * @param categoryId 类别编号 (-1,表示不设定CategoryId)
	 * @param status 贴子状态 (1 是, 0 否)
	 * @param pagination 分页参数
	 * @return QueryResult 帖子集合
	 */
	public HibernatePage<Topic> findTopics(int forumId, int categoryId, Map orderMap, int status, Pagination pagination) ;
	
	/**
	 * 取得制定论坛的贴子
	 * 
	 * @param forumId 论坛编号
	 * @param orderMap 排序数组
	 * @param pagination 分页对象
	 * @return HibernatePage<Topic> 论坛贴子列表

	 */
	public HibernatePage<Topic> findTopics (final long forumId, Map orderMap, final Pagination pagination)  ;
	
	/**
	 * 检索帖子
	 * @param forumId 论坛编号
	 * @param type 检索类型
	 * @param keyword 检索关键字
	 * @param timePoint 时间点 当timePoint为""时，不进行时间设定
	 * @param way 时间方向
	 * @param orderMap 排序信息
	 * @param pagination 
	 * @return

	 */
	public HibernatePage<Topic> searchTopics (int forumId, String type, String keyword, String timePoint, String way, Map orderMap, Pagination pagination);
	
	/**
	 * 根据论坛编号查找制定数目的主题
	 * @param forumId 论坛编号
	 * @param dataNum 结果数
	 * @return List 主题列表
	 */
	public List findTopic(int forumId,int dataNum) ;
	
	/**
	 * 根据主题论坛版块编号删除主题
	 * 
	 * @param forumId 主题编号
	 * @return Topic 主题对象
	 */	
	public void deleteTopicByForum(int forumId)  ;
	
	/**
	 * 更新贴子浏览次数
	 *  
	 * @param topicId 贴子编号
	 * @
	 */
	public void updateTopicViews(int topicId) ;
	
	/**
	 * 取得主题总数
	 * @return
	 * @
	 */
	public long countTopic() ;
	
	/**
	 * 根据ForumId统计主题总数
	 * @param forumId
	 * @return
	 * @
	 */
	public long countTopic(int forumId) ;

	/**
	 * 更新主题是否被删除状态
	 *
	 * @param topicId 主题编号
	 * @param isDelete 是否被删除
	 * isDelete 1 将主题丢弃到垃圾箱，0 主题状态正常
	 * @
	 */
	public void updateTopicIsDelete(int topicId,int isDelete) ;
	
	/**
	 * 更新主题状态
	 *
	 * @param topicId 主题编号
	 * @param status 是否被置顶
	 * status 1 精华贴，2 被锁定的贴子
	 * @
	 */
	public void updateTopicStatus(int topicId,int status) ;
	
	
	/**
	 * 移动主题
	 *
	 * @param topicId 主题列表
	 * @param forumId 论坛编号
	 * @
	 */
	public void moveTopic(int topicId,int forumId);
	
	/**
	 * 将主题丢到垃圾箱
	 * @param topicId 主题编号
	 * @
	 */
	public void trashTopic(int topicId) ;
	
	/**
	 * 更新主题是否被置顶
	 *
	 * @param topicId 主题编号
	 * @param isTop 是否被置顶
	 * isTop 1 置顶，0 主题状态正常
	 * @
	 */
	public void updateTopicIsTop(int topicId,int isTop) ;

    Topic getNextTopic(long tid,Topic curTopic);

    Topic getLastTopic(long tid,Topic curTopic);

    HibernatePage<Topic> searchTopics(SearchBean searchBean, Pagination pagination);
    void indexAll();

    HibernatePage<Topic> searchTopics2(SearchBean searchBean, Pagination pagination);
}
